package storm.bolt;

import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;

import java.util.Map;

/**
 * Created by luoqifei on 2016/10/13.
 */
public class StormBaseBoltDemo extends BaseRichBolt {
private OutputCollector collector;
    //必须实现的三个抽象方法
    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
        collector = outputCollector;//这是用来发送新的元组
        //做一个准备工作，比如注册审计
        //topologyContext.registerMetric("name",)
    }
    //必须实现的三个抽象方法
    public void execute(Tuple tuple) {
        //这里产生新的数据流，发送出去
    collector.emit("数据流id",tuple,new Values());
        //Bolt 也可以输出多个数据流。
        // 为了实现这个功能，可以先通过 OutputFieldsDeclarer 的 declareStream 方法来声明定义不同的数据流，
        // 然后在发送数据时在 OutputCollector 的 emit 方法中将数据流 id 作为参数来实现数据发送的功能。
    }
    //必须实现的三个抽象方法
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
        //这里定义数据流id
          outputFieldsDeclarer.declareStream("数据流的id",new Fields());
    }
}
